// 示例 1：

// 输入：s = "3[a]2[bc]"
// 输出："aaabcbc"
// 示例 2：

// 输入：s = "3[a2[c]]"
// 输出："accaccacc"
// 示例 3：

// 输入：s = "2[abc]3[cd]ef"
// 输出："abcabccdcdcdef"
// 示例 4：

// 输入：s = "abc3[cd]xyz"
// 输出："abccdcdcdxyz"
var decodeString = function (s) {
    let stack = []
    let str = '', num = 0
    for (char of s) {
        if (char === '[') { // 当碰到左括号，将当前str和num入栈，并重置str和num
            stack.push([str, num])
            str = '', num = 0
        } else if (char === ']') { // 遇到右括号，弹出栈顶元素并处理
            let [preStr, preNum] = stack.pop()
            str = preStr + str.repeat(preNum)
        } else if (/\d/.test(char)) {
            num = num * 10 + parseInt(char)
        } else {
            str += char
        }
    }
    return str
};